perm filename GRAPH[L70,TES] blob
sn#009948 filedate 1972-05-14 generic text, type T, neo UTF8
00100 DEFPROP(PARSE,T,?*FSUBR) ;
00200 DEFPROP(?&NN,T,SPECIAL) ; DEFPROP(?&READY,T,SPECIAL); DEFPROP(?&PPPN,T,SPECIAL);
00300 DEFPROP(?&PROB,T,SPECIAL) ; DEFPROP(?&LASTPROB,T,SPECIAL); DEFPROP(BLOCKS,T,SPECIAL);
00400
00500
00600 ?&READY{NIL} ← '?*?*?* ;
00700
00800 EXPR EDIT(FOO) ; BEGIN PRINTSTR("*****") ; RETURN NIL ; END ;
00900
01000 EXPR CHOICE(?&NN) ;
01100 SELECT ?&I FROM ?&I:1 NEXT ?&I+1 UNLESS ?&I GREATERP ?&NN ;
01200
01300 EXPR TRANSLATE() ;
01400 BEGIN
01500 ?&LASTPROB{NIL} ← 5 ;
01600 BLOCKS{NIL} ← NIL ;
01700 ?&PPPN{NIL} ← GETPPN() ;
01800 PRINTSTR("TRANSLATING FROM FILE: TOWER") ;
01900 PARSE(TOWER) ;
02000 TERPRI NIL ;
02100 PRINTSTR("YOU ARE ABOUT TO TYPE TO MLISP2, E.G.: PROBLEM(1);") ;
02200 PARSE() ;
02300 END ;
02400
02500 EXPR PROBLEM(?&N) ;
02600 BEGIN
02700 IF ¬'TOWER.EXPR ∧ ¬'TOWER.FEXPR ∧ ¬'TOWER.SUBR ∧ ¬'TOWER.FSUBR THEN
02800 PRINTSTR("YOU FORGOT TO TYPE (TRANSLATE)") ALSO RETURN NIL ;
02900 IF ?&N LESSP 1 OR ?&N GREATERP ?&LASTPROB THEN
03000 PRINTSTR("ONLY " CAT ?&LASTPROB CAT " PROBLEMS!") ALSO RETURN ?&READY ;
03100 ?&PROB{NIL} ← ?&N CONS CASE ?&N OF
03200 BEGIN
03300 '((1 2 4) (2) (3) (5) (7) (11) (2 5) (2 3)) ;
03400 '((2 5 8) (3) (7) (8) (13) (14) (15) (5 10) (2 10)) ;
03500 '((2 2 3 8 5) (4) (11) (7) (4 11) (11 7) (7 11)) ;
03600 '((2 3 1 10 4 3 2) (13) (22) (9 6) (14 9)) ;
03700 '((15 14 2 5 8 11 14) (2) (19) (17) (1) (67) (54 10) (30 10) (10 30)) ;
03800 END ;
03900 '?&ISPROB.?&ISPROB{NIL} ← 'T ;
04000 PRINC("THESE ARE THE BLOCKS YOU HAVE:") ; TERPRI NIL ;
04100 BLOCKS{NIL} ← PRINT CADR ?&PROB ;
04200 RETURN ?&READY ;
04300 END ;
04400
04500 FEXPR TEST(?&K) ;
04600 BEGIN
04700 NEW ?&HEIGHTSLIST, ?&HEIGHTS, ?&GRADE, ?&CCC, ?&ANS ;
04800 IF ¬'?&ISPROB.?&ISPROB THEN
04900 PRINTSTR("YOU FORGOT TO SAY PROBLEM(1);") ALSO RETURN NIL ;
05000 ?&HEIGHTSLIST ←
05100 IF LENGTH(?&K) GREATERP 2 THEN PRINTSTR("TEST HAS 0, 1, OR 2 ARGUMENTS!")
05200 ALSO NIL
05300 ELSE CASE LENGTH(?&K) + 1 OF
05400 BEGIN
05500 CDDR ?&PROB ;
05600 IF ¬NUMBERP(CAR ?&K) THEN PRINTSTR("NON-NUMERIC ARGUMENT TO TEST")
05700 ALSO NIL ELSE <?&K> ;
05800 IF ¬NUMBERP(CAR ?&K) OR ¬NUMBERP(CADR ?&K) THEN
05900 PRINTSTR("NON-NUMERIC ARGUMENT TO TEST") ALSO NIL ELSE <?&K> ;
06000 PRINTSTR("TEST CAN ONLY HAVE 0, 1, OR 2 ARGUMENTS") ;
06100 END ;
06200 ?&GRADE ← CAR ?&PROB = ?&LASTPROB AND ¬?&K ;
06300 IF ?&GRADE THEN
06400 IF 'TOWER.FEXPR ∨ 'FAILURE.FEXPR ∨ 'CHOICE.FEXPR THEN
06500 PRINTSTR("Please UNTRACE") ALSO RETURN NIL
06600 ELSE
06700 BEGIN
06800 PRINTSTR("ANSWERS WILL NOT APPEAR ON THE TERMINAL.") ;
06900 EVAL(<'OUTC, <'OUTPUT, '?&CH, '(4 HJE), ?&PPPN>>) ;
07000 INC(INPUT(DSK?:, TOWER)) ;
07100 WHILE ERRSET(TYO(TYI()),T) NEQ '?$EOF?$ DO NIL ;
07200 PRINT CADR ?&PROB ; TERPRI NIL ;
07300 END ;
07400 FOR ?&HEIGHTS IN ?&HEIGHTSLIST DO
07500 BEGIN
07600 ?&CCC ← '(TOWER TWOTOWERS)[LENGTH(?&HEIGHTS)] CONS ?&HEIGHTS ;
07700 BLOCKS ← CADR ?&PROB ;
07800 PRIN1 ?&CCC ;
07900 IF ?&GRADE THEN GC() ;
08000 ?&ANS ← CASE CHOICE(2) OF BEGIN EVAL ?&CCC ; 'FAILURE END ;
08100 IF ?&GRADE THEN OUTC('?&CH, NIL) ;
08200 PRINC(" = ") ; PRIN1 ?&ANS ;
08300 TERPRI NIL ;
08400 FLUSH() ;
08500 END ;
08600 TERPRI NIL ;
08700 IF ?&GRADE THEN
08800 BEGIN
08900 OUTC(NIL, T) ;
09000 PRINTSTR("ANSWERS RECORDED FOR GRADER") ;
09100 END ;
09200 RETURN ?&READY ;
09300 END ;
09400
09500 _EOF_